package com.zxl.designpattern.creator.factory;

import com.zxl.designpattern.creator.factory.pojo.Phone;
import com.zxl.designpattern.creator.factory.pojo.XiaomiPhone;
import com.zxl.designpattern.creator.factory.pojo.HuaweiPhone;

/**
 * @author zxl
 * @version 1.0
 * @description 简单工厂模式(不属于GOF的23种设计模式之一)
 *  如果提供静态方法就是静态工厂，通过类.方法直接调用
 *  如果提供非静态方法就是普通工厂，需要先new一个工厂，通过对象.方法调用
 * @date 2025/5/31 18:40
 */
public class SimpleFactory {

    /**
     * 创建手机对象（这里提供静态方法，是静态工厂类）
     * 对象的创建和业务逻辑层分开，这样以后就避免了修改客户代码，如果要实现新产品直接修改工厂类，而不需要在原代码中修改，这样就降低了客户代码修改的可能性。
     * 缺点：
     * 增加新产品时还是需要修改工厂类的代码，违背了“开闭原则”。
     * @param type
     * @return
     */
    public static Phone createPhone(String type) {
        switch (type) {
            case "MI":
                return new XiaomiPhone();
            case "HW":
                return new HuaweiPhone();
            default:
                throw new IllegalArgumentException("未知手机型号: " + type);
        }
    }
}
